"""
系统随机生成8个1-33的整数形成一注中奖号码，用户在控制台输入8位数字看是否中奖：
号码全对：一等奖
错一个：二等奖
错两个：三等奖
错三个：四等奖
尝试模拟随机购买10000注彩票对特定号码的中奖概率。
"""
import random

"""
抽象思路：
1.生成中奖号码函数：使用for循环，随机生成一个随机数，放入到中奖号码列表中，之后添加的数据都判断容器中是否存在
2.用户输入函数，将用户输入的八个数字放入列表容器中存储起来，去重思路同上
3.颁奖函数，判断用户输入的数据和中奖号码的相等性，采用for循环。
"""


def win_number_func():
    win_number = []
    while len(win_number) < 8:
        temp_num = random.randint(1, 33)
        if temp_num not in win_number:
            win_number.append(temp_num)
    return win_number


def user_input_func():
    user_number = []
    print('请输入8个数字(1-33中奖号码中没有重复的数字)作为你猜测的数据')
    while len(user_number) < 8:
        a = int(input(f'请输入第{len(user_number) + 1}个数:\t'))
        user_number.append(a)
    return user_number


def judge_award_func(num_list, win_list):
    count = 0
    for item in num_list:
        if item in win_list:
            count += 1

    if count == 8:
        return '一等奖'
    elif count == 7:
        return '二等奖'
    elif count == 6:
        return '三等奖'
    elif count == 5:
        return '四等奖'
    else:
        return '很遗憾，您没有中奖'


def random_ticket_func():
    """生成一张随机彩票"""
    ticket = []
    while len(ticket) < 8:
        temp_num = random.randint(1, 33)
        if temp_num not in ticket:
            ticket.append(temp_num)
    return ticket


def simulate_lottery(times=10000):
    """模拟多次抽奖并统计结果"""
    winning_numbers = win_number_func()
    print(f'本次模拟的中奖号码是: {winning_numbers}')
    
    first_prize = 0   # 一等奖
    second_prize = 0  # 二等奖
    third_prize = 0   # 三等奖
    fourth_prize = 0  # 四等奖
    no_prize = 0      # 未中奖
    
    for i in range(times):
        # 生成一张随机彩票
        ticket = random_ticket_func()
        # 判断中奖结果
        result = judge_award_func(ticket, winning_numbers)
        
        # 统计各奖项次数
        if result == '一等奖':
            first_prize += 1
        elif result == '二等奖':
            second_prize += 1
        elif result == '三等奖':
            third_prize += 1
        elif result == '四等奖':
            fourth_prize += 1
        else:
            no_prize += 1
    
    # 计算概率
    print(f'\n模拟{times}次抽奖的结果统计:')
    print(f'一等奖: {first_prize}次, 概率: {first_prize/times*100:.6f}%')
    print(f'二等奖: {second_prize}次, 概率: {second_prize/times*100:.6f}%')
    print(f'三等奖: {third_prize}次, 概率: {third_prize/times*100:.6f}%')
    print(f'四等奖: {fourth_prize}次, 概率: {fourth_prize/times*100:.6f}%')
    print(f'未中奖: {no_prize}次, 概率: {no_prize/times*100:.6f}%')


# 单次抽奖演示
def single_draw():
    target = win_number_func()
    user_input = user_input_func()
    result = judge_award_func(user_input, target)
    print(f'中奖号码是 {target}')
    print(f'您输入的号码是 {user_input}')
    print(result)


# 选择运行模式
print('请选择运行模式:')
print('1. 单次抽奖(手动输入号码)')
print('2. 模拟10000次抽奖')
choice = input('请输入选择(1或2): ')

if choice == '1':
    single_draw()
else:
    simulate_lottery(100000)
